package com.itheima.algorithm.hashtable;

import java.util.HashSet;

/**
 * @author: TylerZhong
 * @description:
 * 找出出现一次的数字
 * <p> 除了某个元素只出现一次以外，其余每个元素均出现两次</p>
 */
public class E05Leetcode136 {
    /**
     * 输入：nums = [2,2,1]
     * 输出：1
     *
     * 输入：nums = [4,1,2,1,2]
     * 输出：4
     *
     * 思路2
     * 1. 任何相同的数字异或，结果都是 0
     * 2. 任何数字与 0 异或，结果是数字本身
     */
    public int singleNumber(int[] nums) {
        int num = nums[0];
        for (int i = 1; i < nums.length; i++) {
            num = num ^ nums[i];
        }
        return num;
    }
    public int singleNumber1(int[] nums) {
        HashSet<Integer> set = new HashSet<>();
        for (int num : nums) {
            if (!set.add(num)) {
                set.remove(num);
            }
        }
        return set.toArray(new Integer[0])[0];
    }
}
